Set x {
    x.shape = CircleTransform {
        strokeWidth : 0
    }

    x.text = TextTransform {
      scaleX : 1.0
      scaleY : 1.0
      string : x.label
    }

    x.labelFn = encourage containsPoly(x.shape, x.text)
    x.maxSizeFn = encourage maximumSize(x.shape, 300.0)
    x.minSizeFn = encourage minimumSize(x.shape, 80.0)
    x.onCanvasFn = encourage polyOnCanvas(x.shape)
    LOCAL.layering  = x.shape below x.text
}

Set x; Set y
where NotIntersecting(x, y) {
    LOCAL.posFn = encourage disjointPoly(x.shape, y.shape)
}

Point p {
  p.shape = RectangleTransform {
    strokeWidth : 0
    sizeX : 140.0
    sizeY : 8.0
  }

  p.text = TextTransform {
    scaleX : 1.0
    scaleY : 1.0
    string : p.label
  }

  LOCAL.layering = p.shape below p.text
  p.onCanvasFn = encourage polyOnCanvas(p.shape)
  p.labelFn = encourage atPoint2(p.text, 0.0, 0.0, p.shape, 0.5, 0.0)
}

Set s; Point p
where DisjointSP(s, p) {
  LOCAL.posFn = encourage disjointPoly(s.shape, p.shape)
}